package KyServer.main;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

import KyServer.util.ConfigConstants;
import KyServer.util.propertiesUtil;

public class KyServer {

	//静态代码块作用---程序一运行就将某文件夹中的资源都写入xml文件中
	static {
		//先创建解析器，用dom4j解析文件
		SAXReader saxReader = new SAXReader();
		try {
			Document document = saxReader.read(propertiesUtil.getProperty(ConfigConstants.SERVER_FILE_PATH_KEY));
			//获取文件的根元素
			Element rootElement = document.getRootElement();
			//获取根元素下的file元素
			List<Element> fileElements = rootElement.elements("file");
			//判断files.xml文件中是否有内容
			if(fileElements==null || fileElements.size()<1) {
				//如果files.xml中没有file子标签则将本地的文件写入
				//获取本地文件的路径
				File resourcesFile = new File(ConfigConstants.SERVER_RESOURCES_PATH);
				//获取路径下的全部文件
				File[] files = resourcesFile.listFiles();
				//通过循环将文件中的资源全部写入files.xml文件中
				for(int i=0;i<files.length;i++) {
					//往files.xml中添加子元素file
					Element fileElement = rootElement.addElement("file");
					//分别给file中的元素设置属性或值
					fileElement.addAttribute("id", (i+1)+" ");
					fileElement.addElement("name").setText(files[i].getName());
					fileElement.addElement("size").setText((files[i].length()/1024.0)+" ");
					fileElement.addElement("path").setText(ConfigConstants.SERVER_RESOURCES_PATH+"/"+files[i].getName());
				}
				//将更新后的内容保存到document对象中
				OutputFormat format = OutputFormat.createPrettyPrint();
				format.setEncoding("UTF-8");
				XMLWriter writer = new XMLWriter(new FileWriter(propertiesUtil.getProperty(ConfigConstants.SERVER_FILE_PATH_KEY)), format);
				writer.write(document);
				writer.close();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}
	
	public static void main(String[] args) {

		//创建服务器套接字
		try {
			//将存有接口的文件路径传入
			ServerSocket serverSocket = new ServerSocket(Integer.parseInt(propertiesUtil.getProperty(ConfigConstants.SERVER_PORT_KEY)));
			System.out.println("服务器已启动。。。。。。");
			//服务器接收客户端的请求
			Socket clientSocket = serverSocket.accept();
			System.out.println("已受理客户端"+clientSocket.getInetAddress().getHostName()+"："+clientSocket.getPort()+"发来的请求！");
			
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	//用一个子线程专门接收客户端的请求
}
